package auth

import (
	"errors"
	"time"
)

type Validator interface {
	VUsername() string // login 中的 username字段
	//Password() string
	VPassword() string // login 中的 password字段

	Key() string // 从password 中 解析到的key, 即真实密码inPassword处理后产生的 key，用于校验， 实际形式为 hex2string(..)

	GenerateKey(pass string) (string, error) //将输入字符处理后产生的key,实际形式 hex2string(..)
}

// 单个用户信息
type AuthStore interface {
	Username() string               // 保存的 username字段
	Password() string               // 保存的 password字段
	Verify(Validator) (bool, error) //校验是否正确 一般为判断  Validator.GenerateKey(pass) == Validator.Key ，相同表示valid
}

type AuthTokenManager interface {
	GenerateToken(username string, duration time.Duration, opts ...TokenOption) (tokenstr string, err error) // 产生token
	VerifyToken(tokenstring string, opts ...TokenOption) (valid bool, user string, err error)                // 校验token
}

var (
	ErrInvalidPasswordLength = errors.New("invalid password lengh")
)
